"""
一、为什么要有类型注解？
1. 类型注解使代码更易于理解。开发者可以快速了解函数参数和返回值的类型。
2. 许多现代 IDE利用类型注解提供更好的代码补全、文档提示和重构支持，提高开发效率。
"""

# 二、变量的类型注解语法
"""
基本语法1:
变量:类型

基本语法2:
在注释中, # type:类型名
"""
name : str = "张三"
age : int = 18
score : float = 99.9

class student:
    pass

stu : student = student()

print(name)
print(age)
print(score)

"""
基础容器类型注解
"""
my_list : list = [1,2,3]
print(my_list)

my_tuple : tuple = (1,2,3)
print(my_tuple)

my_set : set = {1,2,3}
print(my_set)

my_dict : dict = {"hello" : "你好"}
print(my_dict)

"""
容器类型详细注解
"""
my_list : list[int] = [1,2,3] # 表示list列表中的元素全部都是int类型
print(my_list)

my_tuple : tuple[int, str, bool] = (1, "hello", True)
print(my_tuple)


my_set : set[int] = {1,2,3}
print(my_set)

my_dict : dict[str, str] = {"hello" : "你好"}
print(my_dict)

# 三、函数和方法的形参类型注解
"""
函数和方法的形参类型注解语法:
def 函数/方法名(形参名: 类型, 形参名: 类型, ...):
    pass   
"""
def Add(x:int, y:int):
    return x + y

def func(data: list):
    pass

# 三、函数和方法的返回值类型注解
"""
def 函数/方法名(形参名: 类型, 形参名: 类型, ...) -> 返回值:
    pass
"""
def Add(x:int, y:int) -> int:
    return x + y


# 四、Union联合类型注解
"""
比方说:
my_list: list[int] = [1,2,3]
因为list列表可以存储不同类型的元素, 那么此时列表存储了其他类型，如何注解呢?

字典也同理, 比如
my_dict : dict[str, int] = {"age" : 13}
那么现在假设字典还要存储的键值对的类型都是字符串类型呢？

综上，遇到这中情况就需要使用Union联合类型注解
"""
from typing import Union
my_list: list[Union[int, str]] = [1,2,3,"hello"]
my_dict: dict[str, Union[str, int]] = {"name": "张三", "age":31}
            # 键的类型   值的类型

# 说明: 这种方式函数/方法也同样适用
from typing import Union
def func(data: Union[int, str]) -> Union[int, str]:
    pass

func()